#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <signal.h>
int *p;
// void hand()
// {
//     //卸载共享内存 shmdt
//     shmdt(p);
//     printf("bye bye");
//     exit(0);
// }


int main()
{
    // signal(2,hand);
    //创建key
    key_t  key = ftok(".",'m');
    if (-1==key)
    {
        printf("创建key失败：%m\n");
        exit(-1);
    }

    //创建共享内存
    int shmid = shmget(key,4096,IPC_CREAT);
    if (-1==shmid)
    {
        printf("创建共享内存失败：%m\n");
        exit(-1);
    }
    printf("创建共享内存成功\n");
#if 0
    //删除共享内存
    int r = shmctl(shmid,IPC_RMID,NULL);
    if (-1==r)
    {
        printf("删除共享内存失败:%m\n");
        exit(-1);
    }
    printf("删除共享内存成功\n");
#else
    struct shmid_ds ds={0};
    int r = shmctl(shmid,IPC_STAT,&ds);
    if (-1==r)
    {
        printf("删除共享内存失败:%m\n");
        exit(-1);
    }
    printf("获取共享内存挂载数%d",ds.shm_nattch);
    printf("删除共享内存成功\n");

# endif
    return 0;
}